package repositories

import (
	"github.com/jinzhu/gorm"
	"qimo_work/config"
	"qimo_work/models"
)

// 查找用户名是否存在并返回对应的用户
func FindUserByUsername(username string) (models.User, error) {
	var user models.User
	// 在数据库中查找用户
	err := config.DB.Where("username = ?", username).First(&user).Error
	if err != nil {
		return user, err // 如果发生错误或找不到用户，则返回错误
	}
	return user, nil // 找到用户时返回用户对象和 nil 错误
}

// 查找邮箱是否存在
func FindUserByEmail(email string) (models.User, error) {
	var user models.User
	if err := config.DB.Where("email = ?", email).First(&user).Error; err != nil {
		if err == gorm.ErrRecordNotFound {
			return user, nil // 邮箱不存在
		}
		return user, err
	}
	return user, nil
}

// 创建用户
func CreateUser(user *models.User) error {
	if err := config.DB.Create(user).Error; err != nil {
		return err
	}
	return nil
}

// 用户管理
// GetAllUsers 获取分页用户数据
func GetAllUsers(page, pageSize int) ([]models.User, int64, error) {
	var users []models.User
	var total int64

	// 计算总数
	err := config.DB.Model(&models.User{}).Count(&total).Error
	if err != nil {
		return nil, 0, err
	}

	// 获取分页数据
	offset := (page - 1) * pageSize
	err = config.DB.Limit(pageSize).Offset(offset).Find(&users).Error
	if err != nil {
		return nil, 0, err
	}

	return users, total, nil
}

// 根据ID查找用户
func GetUserByID(id uint) (models.User, error) {
	var user models.User
	// 在数据库中查找用户
	err := config.DB.Where("id = ?", id).First(&user).Error
	if err != nil {
		if err == gorm.ErrRecordNotFound {
			return user, nil // 用户未找到，返回空用户和 nil 错误
		}
		return user, err // 其他错误
	}
	return user, nil
}

// UpdateUser 更新用户
func UpdateUser(user models.User) error {
	if err := config.DB.Save(&user).Error; err != nil {
		return err
	}
	return nil
}

// DeleteUser 删除用户
func DeleteUser(id uint) error {
	if err := config.DB.Delete(&models.User{}, id).Error; err != nil {
		return err
	}
	return nil
}
